package com.itextpdf.text.pdf; import com.itextpdf.testutils.CompareTool; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; import com.itextpdf.text.Phrase; import com.itextpdf.text.Rectangle; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; public class PageEventTest { private static String CMP_FOLDER = "./src/test/resources/com/itextpdf/text/pdf/PageEventTest/"; private static String OUTPUT_FOLDER = "./target/com/itextpdf/test/pdf/PageEventTest/"; @BeforeClass public static void init() { new File(OUTPUT_FOLDER).mkdirs(); } @Test public void pageEventTest01() throws IOException, DocumentException, InterruptedException { String fileName = "pageEventTest01.pdf"; ByteArrayOutputStream baos = new ByteArrayOutputStream(); Document doc = new Document(PageSize.LETTER, 144, 144, 144, 144); PdfWriter writer = PdfWriter.getInstance(doc, baos); writer.setPageEvent(new MyEventHandler()); writer.setTagged(); doc.open(); Chunk c = new Chunk("This is page 1"); doc.add(c); doc.close(); FileOutputStream fos = new FileOutputStream(OUTPUT_FOLDER + fileName); fos.write(baos.toByteArray()); baos.close(); fos.close(); // compare CompareTool compareTool = new CompareTool(); String errorMessage = compareTool.compareByContent(OUTPUT_FOLDER + fileName, CMP_FOLDER + fileName, OUTPUT_FOLDER, "diff"); if (errorMessage != null) { Assert.fail(errorMessage); } } private class MyEventHandler extends PdfPageEventHelper { private PdfPTable _header; private PdfPTable _footer; public MyEventHandler() throws DocumentException { _header = new PdfPTable(1); PdfPCell hCell = new PdfPCell(new Phrase("HEADER")); hCell.setBorder(Rectangle.NO_BORDER); _header.addCell(hCell); _header.setTotalWidth(new float[]{300f}); _footer = new PdfPTable(1); PdfPCell fCell = new PdfPCell(new Phrase("FOOTER")); fCell.setBorder(Rectangle.NO_BORDER); _footer.addCell(fCell); _footer.setTotalWidth(new float[]{300f}); } @Override public void onStartPage(PdfWriter writer, Document document) { super.onStartPage(writer, document); writeHeader(writer); } public void onEndPage(PdfWriter writer, Document document) { super.onEndPage(writer, document); writeFooter(writer); } private void writeHeader(PdfWriter writer) { writer.getDirectContent().saveState(); _header.writeSelectedRows(0, _header.getRows().size(), 72, writer.getPageSize().getHeight() - 72, writer.getDirectContent()); writer.getDirectContent().restoreState(); } private void writeFooter(PdfWriter writer) { writer.getDirectContent().saveState(); _footer.writeSelectedRows(0, _footer.getRows().size(), 72, 72, writer.getDirectContent()); writer.getDirectContent().restoreState(); } } }